home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Libraries / usr (gcc 1.37 libs) / mac / gcc-1.37-libc.s < prev    next >
Text File  |  1993-12-14  |  3KB  |  186 lines

  1.     .text
  2.     .even
  3.     .globl    ENTRY_SYMBOL
  4.     .globl    __main
  5. ENTRY_SYMBOL:
  6. __main:
  7. ;    .word    $A9FF        ; debugger
  8.  jmp _crt_getargs
  9.     .even
  10.     .comm _qd,206
  11.     .even
  12. ; subroutines needed in certain awkward SANE situations
  13.     .lcomm    _TMPINT,4
  14.  .globl _XTOU
  15. _XTOU:
  16.     movel    sp@+,a0
  17.     pea        _TMPINT
  18.     movew    #$3010,sp@-
  19.     .word    $a9eb
  20.     movel    _TMPINT,d0
  21.     jmp        a0@
  22.  .globl _XTOI
  23. _XTOI:
  24.     movel    sp@+,a0
  25.     pea        _TMPINT
  26.     movew    #$2810,sp@-
  27.     .word    $a9eb
  28.     movel    _TMPINT,d0
  29.     jmp        a0@
  30. ;
  31. ; memcpy used to initialise large data at start of a subroutine
  32. ;
  33.     .globl     _memcpy
  34. _memcpy:
  35.     link     a6,#0
  36.     movel     a6@(8),a1    ; dest
  37.     movel     a6@(12),a0    ; src
  38.     movel    a6@(16),d0    ; total bytes
  39.     beq    endcpy
  40. nxtcpy:
  41.     moveb     a0@+,a1@+
  42.     dbne    d0,nxtcpy
  43. endcpy:
  44.     unlk     a6
  45.     rts
  46.     .byte     $86
  47.     .ascii     "memcpy"
  48.     .byte    0
  49.     .even
  50.     .word    0    ; dummy size of literals
  51.     .even
  52. ;
  53. ; the actual multiply D0 = D0*D1
  54. ;
  55.  
  56.     .globl     ULMULT
  57. ULMULT:
  58.    movel     d0,d2
  59.    movel     d1,d3
  60.    swap       d2
  61.    muluw     d3,d2
  62.    movel     d0,d4
  63.    movel     d1,d5
  64.    swap       d5
  65.    muluw     d5,d4
  66.    addw      d4,d2
  67.    swap       d2
  68.    clrw      d2
  69.    muluw     d1,d0
  70.    addl      d2,d0
  71.    rts
  72.     .byte     $86
  73.     .ascii     "ULMULT"
  74.     .byte    0
  75.     .even
  76.     .word    0    ; dummy size of literals
  77.     .even
  78. ;
  79. ;    D0 = D0 / D1 (signed)
  80. ;    D1 = D0 % D1 (signed)
  81. ;
  82.  
  83.     .globl SLDIVT
  84. SLDIVT:
  85.    tstl      d0
  86.    jpl      signed_div1
  87.    tstl      d1
  88.    jpl      signed_div2
  89.    negl      d0
  90.    negl      d1
  91.    jbsr        unsigned_div
  92.    negl      d1
  93.    bra        signed_div3
  94. signed_div2:
  95.    negl      d0
  96.    jbsr        unsigned_div
  97.    negl      d0
  98.    negl      d1
  99.    bra        signed_div3
  100. signed_div1:
  101.    tstl      d1
  102.    jpl      unsigned_div
  103.    negl      d1
  104.    jbsr        unsigned_div
  105.    negl      d0
  106. signed_div3:
  107.    rts
  108.     .byte     $86
  109.     .ascii     "SLDIVT"
  110.     .byte    0
  111.     .even
  112.     .word    0    ; dummy size of literals
  113.     .even
  114. ;
  115. ;    D0 = D0 / D1 (unsigned)
  116. ;    D1 = D0 % D1 (unsigned)
  117. ;
  118.  
  119.     .globl ULDIVT
  120. ULDIVT:
  121. unsigned_div:
  122.    movel     #0x0000ffff,d7
  123.    cmpl      d0,d1
  124.    jls      unsigned_div1
  125.    movel     d0,d1
  126.    moveq      #0x00,d0
  127.    bra        unsigned_div99
  128. unsigned_div1:
  129.    cmpl      d7,d0
  130.    jhi      unsigned_div2
  131.    divuw     d1,d0
  132.    swap       d0
  133.    movew     d0,d1
  134.    clrw      d0
  135.    swap       d0
  136.    bra        unsigned_div99
  137. unsigned_div2:
  138.    cmpl      d7,d1
  139.    jhi      unsigned_div3
  140.    movel     d0,d7
  141.    clrw      d0
  142.    swap       d0
  143.    divuw     d1,d0
  144.    swap       d0
  145.    swap       d7
  146.    movew     d0,d7
  147.    swap       d7
  148.    divuw     d1,d7
  149.    movew     d7,d0
  150.    swap       d7
  151.    movew     d7,d1
  152.    bra        unsigned_div99
  153. unsigned_div6:
  154.    subqw     #0x1,d0
  155.    bra      unsigned_div5
  156. unsigned_div3:
  157.    movel     d0,d2
  158.    movel     d1,d3
  159. unsigned_div4:
  160.    lsrl      #0x1,d0
  161.    lsrl      #0x1,d1
  162.    cmpl      d7,d1
  163.    jhi      unsigned_div4
  164.    divuw     d1,d0
  165.    andl      d7,d0
  166. unsigned_div5:
  167.    movew     d3,d1
  168.    muluw     d0,d1
  169.    movel     d3,d7
  170.    swap       d7
  171.    muluw     d0,d7
  172.    swap       d7
  173.    addl      d7,d1
  174.    jcs      unsigned_div6
  175.    subl      d2,d1
  176.    jhi      unsigned_div6
  177.    negl      d1
  178. unsigned_div99:
  179.    rts
  180.     .byte     $86
  181.     .ascii     "ULDIVT"
  182.     .byte    0
  183.     .even
  184.     .word    0    ; dummy size of literals
  185.     .even
  186.